home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Science / RLaB / toolbox / pinv.r < prev    next >
Text File  |  1994-04-25  |  724b  |  34 lines

  1. //-------------------------------------------------------------------//
  2. //
  3. //  Syntax:    pinv ( A )
  4. //        pinv ( A , tol )
  5.  
  6. //  Description:
  7.  
  8. //  The pinv function computes the pseudo-inverse of it's argument A. 
  9.  
  10. //  See Also: rank
  11.  
  12. //-------------------------------------------------------------------//
  13.  
  14. pinv = function(A, tol)
  15. {
  16.   local(eps, r, S, s, X);
  17.  
  18.   // Pseudo-inverse, ignore singular values <= tol.
  19.   // Default tol = max(size(A)) * s(1) * eps.
  20.  
  21.   s = svd(A);
  22.   if(!exist (tol)) { tol = max(size(A)) * norm(A,"2") * epsilon(); }
  23.  
  24.   r = sum ((s.sigma > tol));
  25.   if(r == 0) 
  26.   { 
  27.     X = zeros (size (A')); 
  28.   else
  29.     S = diag (ones (r,1) ./ s.sigma[1:r]');
  30.     X = s.vt'[;1:r] * S * s.u[;1:r]';
  31.   }
  32.   return X;
  33. };
  34.